iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
Modern Web

後端的鉗形攻勢系列 第 28

[Day. 27] Codeigniter Session

  • 分享至 

  • xImage
  •  

現在我們的網頁已經具有相當基本的功能了

但是,有一個很容易發現的問題,
就是瀏覽器並沒有記住使用者的資訊,而造成每一次都要重新登入

帶來我們的新產品--Session
來看看官方怎麼說:

session類別允許你在使用者瀏覽你的網頁時, 保存使用者的"狀態"及紀錄使用者活動。Session類別將每個使用者的session資訊序列化 (並可經過加密)後, 儲存在cookie中。

這正是我們要的保存使用者的狀態紀錄使用者活動

要使用session前,要先載入(load)
可以直接利用config/autoload.php

$autoload['libraries'] = array('session');

或是直接在檔案中打上

$this->load->library('session');

接著到config/config.php修改:

$config['sess_expiration'] = 0;

sess_expiration是希望session存在的秒數,設為0的目的是要讓session不會過期,直到瀏覽器關閉

我們要在使用者登入後記住使用者資訊,所以到User.php底下的login()做修改:

public function login()
    {	
    	$check_data = $this->user_model->login($this->input->post('username'));
    	if($check_data == ""){
    		echo "Unregister user.";
    	}
    	else{
    		if($check_data->password == $this->input->post('password')){
    			$data = $check_data;
    			$this->session->set_userdata($sess_data = array('username' =>  $data->username));
    			$this->welcome($data);
    		}
    		else{
    			echo "Password Error!";
    		}
    	}

    }

將資訊(使用者的username)用session儲存起來

接著來到login.php登入的介面,新增以下內容:

<?php
    $this->load->helper('url');
    if(isset($_SESSION['username'])){
            redirect('index.php/user/welcome', 'refresh');
        }
?>

這段意思就是當使用者有登入過而留下session紀錄時,在登入頁面可以直接重新導向至後續的網頁。

昨天的資料傳遞問題也可以一併解決~
修改welcome(),把參數拿掉~

public function welcome()
    {
    	$this->load->view('pages/welcome.php');
    }


pages/welcome.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Home</title>
    </head>
    <body>
        <h1>Login Success!</h1><br>
        <h2>Then what do you want to do?</h2>
        <form method=post action="gotoupdate">
        	<button type="submit">點我進行資訊更改</button>
        </form>
    </body>
</html>

修改gotoupdate()

public function gotoupdate()
    {
    	$check_data = $this->user_model->login($_SESSION['username']);
    	$data['about'] = $check_data->about;
    	$data['username'] = $this->input->post('username');
    	$this->load->view('pages/update.php',$data);
    }

接著來測試一下吧~

一樣打開 http://localhost/ci/index.php/
https://ithelp.ithome.com.tw/upload/images/20201012/20126335T3UoP1roS8.png
登入之後再回到http://localhost/ci/index.php/
然後再按下登入
https://ithelp.ithome.com.tw/upload/images/20201012/20126335NzjLen7kPc.png
就會直接略過登入的步驟而到登入後的介面囉~


上一篇
[Day. 26] Codeigniter 頁面
下一篇
[Day. 28] Codeigniter 登出
系列文
後端的鉗形攻勢31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言